﻿2026-05-17T00:46:05.1691549Z ##[group]Run pnpm verify:phase-5
2026-05-17T00:46:05.1691932Z [36;1mpnpm verify:phase-5[0m
2026-05-17T00:46:05.1730486Z shell: /usr/bin/bash -e {0}
2026-05-17T00:46:05.1730792Z env:
2026-05-17T00:46:05.1731033Z   SKIP_STAGING_VERIFY: false
2026-05-17T00:46:05.1731352Z   SKIP_PHASE_4_CARRYOVER: 
2026-05-17T00:46:05.1731644Z   SKIP_STAGING_SMOKE: false
2026-05-17T00:46:05.1732003Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-17T00:46:05.1732403Z   SKIP_PHASE_3_CARRYOVER: 1
2026-05-17T00:46:05.1732696Z   SKIP_TRACE_CHECK: 1
2026-05-17T00:46:05.1732961Z ##[endgroup]
2026-05-17T00:46:05.5072211Z 
2026-05-17T00:46:05.5089969Z > rebno@0.0.0 verify:phase-5 /home/runner/work/rebno/rebno
2026-05-17T00:46:05.5119799Z > node scripts/verify-phase-5.mjs
2026-05-17T00:46:05.5156782Z 
2026-05-17T00:46:05.5489416Z 
2026-05-17T00:46:05.5490164Z === Phase 4 carry-over: verify-phase-4 ===
2026-05-17T00:46:05.5529702Z >>> pnpm verify:phase-4
2026-05-17T00:46:05.8629655Z 
2026-05-17T00:46:05.8639655Z > rebno@0.0.0 verify:phase-4 /home/runner/work/rebno/rebno
2026-05-17T00:46:05.8640276Z > node scripts/verify-phase-4.mjs
2026-05-17T00:46:05.8640528Z 
2026-05-17T00:46:05.8959545Z 
2026-05-17T00:46:05.8960177Z === Workspace: typecheck ===
2026-05-17T00:46:05.8979529Z >>> pnpm -r typecheck
2026-05-17T00:46:06.2260893Z Scope: 5 of 6 workspace projects
2026-05-17T00:46:06.2329962Z packages/db typecheck$ tsc --noEmit
2026-05-17T00:46:06.2349499Z packages/game-logic typecheck$ tsc --noEmit
2026-05-17T00:46:08.9303729Z packages/game-logic typecheck: Done
2026-05-17T00:46:08.9339896Z packages/protocol typecheck$ tsc --noEmit
2026-05-17T00:46:10.4820452Z packages/db typecheck: Done
2026-05-17T00:46:12.1195486Z packages/protocol typecheck: Done
2026-05-17T00:46:12.1202644Z apps/client typecheck$ tsc --noEmit
2026-05-17T00:46:12.1204615Z apps/server typecheck$ tsc --noEmit
2026-05-17T00:46:21.1475839Z apps/client typecheck: Done
2026-05-17T00:46:21.7781931Z apps/server typecheck: Done
2026-05-17T00:46:21.7866444Z 
2026-05-17T00:46:21.7866968Z === Lint: protocol-sync ===
2026-05-17T00:46:21.7867564Z >>> pnpm lint:protocol-sync
2026-05-17T00:46:22.0134427Z 
2026-05-17T00:46:22.0135421Z > rebno@0.0.0 lint:protocol-sync /home/runner/work/rebno/rebno
2026-05-17T00:46:22.0136451Z > node tools/scripts/lint-protocol-sync.mjs
2026-05-17T00:46:22.0136945Z 
2026-05-17T00:46:22.0390551Z lint-protocol-sync: OK
2026-05-17T00:46:22.0494255Z 
2026-05-17T00:46:22.0494785Z === Lint: game-logic-purity ===
2026-05-17T00:46:22.0495441Z >>> pnpm lint:game-logic-purity
2026-05-17T00:46:22.2727263Z 
2026-05-17T00:46:22.2728195Z > rebno@0.0.0 lint:game-logic-purity /home/runner/work/rebno/rebno
2026-05-17T00:46:22.2729375Z > node tools/scripts/lint-game-logic-purity.mjs
2026-05-17T00:46:22.2729912Z 
2026-05-17T00:46:22.2993582Z lint-game-logic-purity: OK (8 file(s) clean)
2026-05-17T00:46:22.3092678Z 
2026-05-17T00:46:22.3093281Z === Lint: better-auth-schema-sync ===
2026-05-17T00:46:22.3093898Z >>> pnpm lint:better-auth-schema-sync
2026-05-17T00:46:22.5346679Z 
2026-05-17T00:46:22.5347858Z > rebno@0.0.0 lint:better-auth-schema-sync /home/runner/work/rebno/rebno
2026-05-17T00:46:22.5348789Z > node tools/scripts/lint-better-auth-schema-sync.mjs
2026-05-17T00:46:22.5349536Z 
2026-05-17T00:46:23.8036407Z lint-better-auth-schema-sync: OK
2026-05-17T00:46:23.8143316Z 
2026-05-17T00:46:23.8143999Z === Lint: rate-limit-budgets ===
2026-05-17T00:46:23.8144657Z >>> pnpm lint:rate-limit-budgets
2026-05-17T00:46:24.0391385Z 
2026-05-17T00:46:24.0392433Z > rebno@0.0.0 lint:rate-limit-budgets /home/runner/work/rebno/rebno
2026-05-17T00:46:24.0393318Z > node tools/scripts/lint-rate-limit-budgets.mjs
2026-05-17T00:46:24.0393837Z 
2026-05-17T00:46:24.0627076Z lint-rate-limit-budgets: OK (5 D-22 budgets locked)
2026-05-17T00:46:24.0725793Z 
2026-05-17T00:46:24.0726364Z === Lint: no-clipboard-rce ===
2026-05-17T00:46:24.0726993Z >>> pnpm lint:no-clipboard-rce
2026-05-17T00:46:24.2955877Z 
2026-05-17T00:46:24.2956835Z > rebno@0.0.0 lint:no-clipboard-rce /home/runner/work/rebno/rebno
2026-05-17T00:46:24.2958332Z > node tools/scripts/lint-no-clipboard-rce.mjs
2026-05-17T00:46:24.2958888Z 
2026-05-17T00:46:24.3254150Z lint-no-clipboard-rce: OK (23 file(s) clean)
2026-05-17T00:46:24.3359433Z 
2026-05-17T00:46:24.3360344Z === Lint: room-layout ===
2026-05-17T00:46:24.3360885Z >>> pnpm lint:room-layout
2026-05-17T00:46:24.5656807Z 
2026-05-17T00:46:24.5657630Z > rebno@0.0.0 lint:room-layout /home/runner/work/rebno/rebno
2026-05-17T00:46:24.5658626Z > node tools/scripts/lint-room-layout.mjs
2026-05-17T00:46:24.5659278Z 
2026-05-17T00:46:24.5944676Z lint-room-layout: OK
2026-05-17T00:46:24.6049970Z 
2026-05-17T00:46:24.6050564Z === ADR 0004 lint ===
2026-05-17T00:46:24.6051127Z >>> pnpm lint:adr:0004
2026-05-17T00:46:24.8291135Z 
2026-05-17T00:46:24.8292041Z > rebno@0.0.0 lint:adr:0004 /home/runner/work/rebno/rebno
2026-05-17T00:46:24.8293242Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0004-room-hot-reload.md --no-matrix
2026-05-17T00:46:24.8293927Z 
2026-05-17T00:46:24.8532925Z OK: ADR docs/adr/0004-room-hot-reload.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-17T00:46:24.8638441Z 
2026-05-17T00:46:24.8639270Z === Drizzle: emit-check ===
2026-05-17T00:46:24.8639850Z >>> pnpm db:emit-check
2026-05-17T00:46:25.0865513Z 
2026-05-17T00:46:25.0866351Z > rebno@0.0.0 db:emit-check /home/runner/work/rebno/rebno
2026-05-17T00:46:25.0868525Z > pnpm -C packages/db exec drizzle-kit generate && node -e "require('fs').copyFileSync('packages/db/migrations/0001_baseline.sql','docs/extracted-server/0001_baseline.sql')" && git diff --exit-code packages/db/migrations/0001_baseline.sql docs/extracted-server/0001_baseline.sql
2026-05-17T00:46:25.0870330Z 
2026-05-17T00:46:25.4245836Z No config path provided, using default 'drizzle.config.ts'
2026-05-17T00:46:25.4247057Z Reading config file '/home/runner/work/rebno/rebno/packages/db/drizzle.config.ts'
2026-05-17T00:46:25.7596275Z 8 tables
2026-05-17T00:46:25.7596917Z accounts 8 columns 1 indexes 0 fks
2026-05-17T00:46:25.7597708Z audit_log 6 columns 0 indexes 2 fks
2026-05-17T00:46:25.7598295Z characters 9 columns 0 indexes 1 fks
2026-05-17T00:46:25.7598890Z inventory_items 4 columns 0 indexes 1 fks
2026-05-17T00:46:25.7599714Z legacy_credentials_staging 6 columns 0 indexes 0 fks
2026-05-17T00:46:25.7600365Z message_board_replies 5 columns 0 indexes 2 fks
2026-05-17T00:46:25.7600974Z message_board_topics 7 columns 0 indexes 1 fks
2026-05-17T00:46:25.7601560Z sessions 5 columns 0 indexes 1 fks
2026-05-17T00:46:25.7601922Z 
2026-05-17T00:46:25.7602612Z No schema changes, nothing to migrate 😴
2026-05-17T00:46:26.4011209Z 
2026-05-17T00:46:26.4011979Z === Drizzle: schema-sync ===
2026-05-17T00:46:26.4012548Z >>> pnpm lint:schema-sync
2026-05-17T00:46:26.6279528Z 
2026-05-17T00:46:26.6280536Z > rebno@0.0.0 lint:schema-sync /home/runner/work/rebno/rebno
2026-05-17T00:46:26.6283072Z > node -e "const a=require('fs').readFileSync('packages/db/migrations/0001_baseline.sql');const b=require('fs').readFileSync('docs/extracted-server/0001_baseline.sql');if(Buffer.compare(a,b)!==0){console.error('docs/extracted-server/0001_baseline.sql out of sync with packages/db/migrations/0001_baseline.sql');process.exit(1)}console.log('OK')"
2026-05-17T00:46:26.6285341Z 
2026-05-17T00:46:26.6494079Z OK
2026-05-17T00:46:26.6602697Z 
2026-05-17T00:46:26.6603227Z === Drizzle: source-comments ===
2026-05-17T00:46:26.6603802Z >>> pnpm lint:source-comments
2026-05-17T00:46:26.8841188Z 
2026-05-17T00:46:26.8842106Z > rebno@0.0.0 lint:source-comments /home/runner/work/rebno/rebno
2026-05-17T00:46:26.8843017Z > pnpm -C packages/db run lint:source-comments
2026-05-17T00:46:26.8843529Z 
2026-05-17T00:46:27.1120515Z 
2026-05-17T00:46:27.1121590Z > @rebno/db@0.1.0 lint:source-comments /home/runner/work/rebno/rebno/packages/db
2026-05-17T00:46:27.1122571Z > node scripts/check-source-comments.mjs
2026-05-17T00:46:27.1123124Z 
2026-05-17T00:46:27.1386410Z check-source-comments: OK (50 columns, all SOURCE-cited)
2026-05-17T00:46:27.1568104Z 
2026-05-17T00:46:27.1568768Z === Workspace: test ===
2026-05-17T00:46:27.1570127Z >>> pnpm -r test
2026-05-17T00:46:27.3867936Z Scope: 5 of 6 workspace projects
2026-05-17T00:46:27.3907202Z packages/db test$ vitest run
2026-05-17T00:46:27.3913912Z packages/game-logic test$ vitest run
2026-05-17T00:46:27.7630907Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-17T00:46:27.7771266Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-17T00:46:28.0983607Z packages/game-logic test:  [32m✓[39m test/step-bno-fidelity.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:46:28.2765032Z packages/game-logic test:  [32m✓[39m test/collision-axis-slide.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:46:28.4394774Z packages/game-logic test:  [32m✓[39m test/wall-slide.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:28.5321366Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:46:28.6410944Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:46:28.7132600Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:46:28.7996142Z packages/game-logic test:  [32m✓[39m test/navi-mask-bbox.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:28.9681006Z packages/game-logic test:  [32m✓[39m test/walkable-edge.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:29.1339300Z packages/game-logic test:  [32m✓[39m test/movement-constants.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:29.2959808Z packages/game-logic test:  [32m✓[39m test/sprite-state-machine.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:29.3015396Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T00:46:29.3055419Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-17T00:46:29.3077801Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-17T00:46:29.3080268Z packages/db test: [2m   Start at [22m 00:46:27
2026-05-17T00:46:29.3093780Z packages/db test: [2m   Duration [22m 1.54s[2m (transform 137ms, setup 0ms, import 1.06s, tests 22ms, environment 0ms)[22m
2026-05-17T00:46:29.3305605Z packages/db test: Done
2026-05-17T00:46:29.3339618Z packages/protocol test$ vitest run
2026-05-17T00:46:29.4956910Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T00:46:29.6640689Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:29.7481175Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-17T00:46:29.8452688Z packages/game-logic test:  [32m✓[39m test/run-speed.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T00:46:30.0190990Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:30.0380320Z packages/game-logic test: [2m Test Files [22m [1m[32m12 passed[39m[22m[90m (12)[39m
2026-05-17T00:46:30.0420063Z packages/game-logic test: [2m      Tests [22m [1m[32m61 passed[39m[22m[90m (61)[39m
2026-05-17T00:46:30.0429904Z packages/game-logic test: [2m   Start at [22m 00:46:27
2026-05-17T00:46:30.0450269Z packages/game-logic test: [2m   Duration [22m 2.24s[2m (transform 217ms, setup 0ms, import 394ms, tests 81ms, environment 1ms)[22m
2026-05-17T00:46:30.0722058Z packages/game-logic test: Done
2026-05-17T00:46:30.0809955Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m15 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-17T00:46:30.2253037Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:46:30.3654638Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:30.4948346Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:30.4976121Z packages/protocol test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-17T00:46:30.4977339Z packages/protocol test: [2m      Tests [22m [1m[32m41 passed[39m[22m[90m (41)[39m
2026-05-17T00:46:30.4978227Z packages/protocol test: [2m   Start at [22m 00:46:29
2026-05-17T00:46:30.4979643Z packages/protocol test: [2m   Duration [22m 742ms[2m (transform 125ms, setup 0ms, import 222ms, tests 29ms, environment 0ms)[22m
2026-05-17T00:46:30.5356348Z packages/protocol test: Done
2026-05-17T00:46:30.5361365Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-17T00:46:30.5363568Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-17T00:46:30.9211744Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-17T00:46:31.0050905Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-17T00:46:32.1534314Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m6 tests[22m[2m)[22m[33m 381[2mms[22m[39m
2026-05-17T00:46:32.1540423Z apps/server test:      [33m[2m✓[22m[39m empty iterable → no-op (no txn opened) [33m 343[2mms[22m[39m
2026-05-17T00:46:32.1935932Z apps/client test:  [32m✓[39m src/__test__/nameplate-stability.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 25[2mms[22m[39m
2026-05-17T00:46:32.4671419Z apps/server test:  [32m✓[39m test/layout-derive.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 94[2mms[22m[39m
2026-05-17T00:46:32.7080964Z apps/server test:  [32m✓[39m test/static-assets.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T00:46:32.8795534Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T00:46:33.0952176Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-17T00:46:33.3520685Z apps/server test: {"level":40,"time":1778978793349,"pid":3181,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T00:46:33.3568218Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:46:33.3620007Z apps/server test: {"level":40,"time":1778978793352,"pid":3181,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T00:46:33.3621967Z apps/server test: {"level":40,"time":1778978793352,"pid":3181,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T00:46:33.5008074Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-17T00:46:33.5030577Z apps/client test: [22m[39mroom_layout signature did not verify — rendering anyway (defense-in-depth; see 06.1-D40-SPIKE.md) mvp-lobby 000
2026-05-17T00:46:33.5881387Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 202[2mms[22m[39m
2026-05-17T00:46:34.0575445Z apps/server test: {"level":30,"time":1778978794055,"pid":3197,"hostname":"runnervmrw5os","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-17T00:46:34.0610373Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 539[2mms[22m[39m
2026-05-17T00:46:34.0630143Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 436[2mms[22m[39m
2026-05-17T00:46:34.5254415Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.teleport-gate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 72[2mms[22m[39m
2026-05-17T00:46:34.8030718Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T00:46:34.8040377Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-XNG176/rebno.db
2026-05-17T00:46:34.8049312Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:46:34.8050400Z apps/server test: [run-migrations] OK
2026-05-17T00:46:34.8167448Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T00:46:34.8172716Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-211Lq7/rebno.db
2026-05-17T00:46:34.8173901Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:46:34.8175464Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-17T00:46:34.8176535Z apps/server test: [run-migrations] OK
2026-05-17T00:46:34.8279170Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T00:46:34.8280914Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-DkI3Rv/rebno.db
2026-05-17T00:46:34.8282178Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:46:34.8283074Z apps/server test: [run-migrations] OK
2026-05-17T00:46:34.8284736Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T00:46:34.8286274Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-DkI3Rv/rebno.db
2026-05-17T00:46:34.8287390Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:46:34.8288277Z apps/server test: [run-migrations] OK
2026-05-17T00:46:34.8343027Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 89[2mms[22m[39m
2026-05-17T00:46:35.0600928Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 18[2mms[22m[39m
2026-05-17T00:46:35.2295381Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:46:35.3607735Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 47[2mms[22m[39m
2026-05-17T00:46:35.4315514Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-17T00:46:35.5927591Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:36.1744418Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-17T00:46:36.1758827Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌁ auth for agents [www.vestauth.com]
2026-05-17T00:46:36.1767346Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-17T00:46:36.2981113Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T00:46:36.7248364Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:36.7305227Z apps/server test: [2m Test Files [22m [1m[32m13 passed[39m[22m[90m (13)[39m
2026-05-17T00:46:36.7350734Z apps/server test: [2m      Tests [22m [1m[32m78 passed[39m[22m[90m (78)[39m
2026-05-17T00:46:36.7380012Z apps/server test: [2m   Start at [22m 00:46:30
2026-05-17T00:46:36.7382455Z apps/server test: [2m   Duration [22m 5.80s[2m (transform 408ms, setup 0ms, import 2.57s, tests 1.20s, environment 1ms)[22m
2026-05-17T00:46:36.7773630Z apps/server test: Done
2026-05-17T00:46:37.0078004Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:37.5550158Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T00:46:38.1831934Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 55[2mms[22m[39m
2026-05-17T00:46:38.7258863Z apps/client test:  [32m✓[39m src/__test__/player-renderer.teleport.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:46:39.2872515Z apps/client test:  [32m✓[39m src/__test__/player-renderer-spawn-delay.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-17T00:46:39.8173080Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-17T00:46:40.4030837Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 64[2mms[22m[39m
2026-05-17T00:46:40.9345602Z apps/client test:  [32m✓[39m src/__test__/nameplate-color.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 24[2mms[22m[39m
2026-05-17T00:46:41.4960183Z apps/client test: [90mstderr[2m | src/__test__/background-renderer.test.ts[2m > [22m[2mBackgroundRenderer — wrap math (sim-tick pure state)[2m > [22m[2mD-64 round-4: dispose() survives a group whose .clear() throws (scene-shutdown race)
2026-05-17T00:46:41.4980750Z apps/client test: [22m[39mBackgroundRenderer.dispose: group.clear threw (likely scene-shutdown race) Cannot read properties of undefined (reading 'size')
2026-05-17T00:46:41.4991943Z apps/client test:  [32m✓[39m src/__test__/background-renderer.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 59[2mms[22m[39m
2026-05-17T00:46:42.0336074Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:42.5420847Z apps/client test:  [32m✓[39m src/__test__/room-renderer.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:43.1164513Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 56[2mms[22m[39m
2026-05-17T00:46:43.6788957Z apps/client test:  [32m✓[39m src/__test__/esc-menu.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 61[2mms[22m[39m
2026-05-17T00:46:44.1945372Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:44.7185342Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:45.2267449Z apps/client test:  [32m✓[39m src/__test__/sprite-state-rate.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:46:45.7507581Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T00:46:46.2577522Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher-shift.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:46:46.7712833Z apps/client test:  [32m✓[39m src/__test__/boot-font-gate.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:47.2823252Z apps/client test:  [32m✓[39m src/__test__/legacy-origin.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:46:47.8749656Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:46:48.3834776Z apps/client test:  [32m✓[39m src/__test__/room-collision-bottom-edge.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:46:48.8942192Z apps/client test:  [32m✓[39m src/__test__/depth-set.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 2[2mms[22m[39m
2026-05-17T00:46:49.4140270Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:46:49.9201669Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:46:50.4319522Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:46:50.4494605Z apps/client test: [2m Test Files [22m [1m[32m31 passed[39m[22m[90m (31)[39m
2026-05-17T00:46:50.4512056Z apps/client test: [2m      Tests [22m [1m[32m223 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (227)[39m
2026-05-17T00:46:50.4513342Z apps/client test: [2m   Start at [22m 00:46:30
2026-05-17T00:46:50.4514684Z apps/client test: [2m   Duration [22m 19.44s[2m (transform 609ms, setup 43ms, collect 1.44s, tests 794ms, environment 11.27s, prepare 2.01s)[22m
2026-05-17T00:46:50.5587791Z apps/client test: Done
2026-05-17T00:46:50.5666417Z 
2026-05-17T00:46:50.5667081Z verify-phase-4: OK (12 steps green)
2026-05-17T00:46:50.5773120Z 
2026-05-17T00:46:50.5773635Z === Workspace: typecheck ===
2026-05-17T00:46:50.5774341Z >>> pnpm -r typecheck
2026-05-17T00:46:50.8064241Z Scope: 5 of 6 workspace projects
2026-05-17T00:46:50.8103816Z packages/db typecheck$ tsc --noEmit
2026-05-17T00:46:50.8110503Z packages/game-logic typecheck$ tsc --noEmit
2026-05-17T00:46:52.7540254Z packages/game-logic typecheck: Done
2026-05-17T00:46:52.7550071Z packages/protocol typecheck$ tsc --noEmit
2026-05-17T00:46:54.2603688Z packages/db typecheck: Done
2026-05-17T00:46:55.4197500Z packages/protocol typecheck: Done
2026-05-17T00:46:55.4203198Z apps/client typecheck$ tsc --noEmit
2026-05-17T00:46:55.4207291Z apps/server typecheck$ tsc --noEmit
2026-05-17T00:47:04.6630198Z apps/client typecheck: Done
2026-05-17T00:47:05.1334327Z apps/server typecheck: Done
2026-05-17T00:47:05.1424952Z 
2026-05-17T00:47:05.1425427Z === Lint: deploy-stack ===
2026-05-17T00:47:05.1426043Z >>> pnpm lint:deploy-stack
2026-05-17T00:47:05.3679796Z 
2026-05-17T00:47:05.3680747Z > rebno@0.0.0 lint:deploy-stack /home/runner/work/rebno/rebno
2026-05-17T00:47:05.3681532Z > node tools/scripts/lint-deploy-stack.mjs
2026-05-17T00:47:05.3682506Z 
2026-05-17T00:47:05.3934660Z lint-deploy-stack: OK
2026-05-17T00:47:05.4044713Z 
2026-05-17T00:47:05.4045328Z === Lint: deploy-stack test ===
2026-05-17T00:47:05.4045905Z >>> pnpm lint:deploy-stack:test
2026-05-17T00:47:05.6283552Z 
2026-05-17T00:47:05.6284237Z > rebno@0.0.0 lint:deploy-stack:test /home/runner/work/rebno/rebno
2026-05-17T00:47:05.6285206Z > node tools/scripts/lint-deploy-stack.test.mjs
2026-05-17T00:47:05.6285757Z 
2026-05-17T00:47:05.6821180Z PASS: lint-deploy-stack green
2026-05-17T00:47:05.6931216Z 
2026-05-17T00:47:05.6931653Z === ADR 0005 lint ===
2026-05-17T00:47:05.6932143Z >>> pnpm lint:adr:0005
2026-05-17T00:47:05.9189187Z 
2026-05-17T00:47:05.9190137Z > rebno@0.0.0 lint:adr:0005 /home/runner/work/rebno/rebno
2026-05-17T00:47:05.9191256Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0005-deploy-topology.md --no-matrix
2026-05-17T00:47:05.9192067Z 
2026-05-17T00:47:05.9440524Z OK: ADR docs/adr/0005-deploy-topology.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-17T00:47:05.9541803Z 
2026-05-17T00:47:05.9542337Z === ADR 0006 lint ===
2026-05-17T00:47:05.9542926Z >>> pnpm lint:adr:0006
2026-05-17T00:47:06.1788828Z 
2026-05-17T00:47:06.1789914Z > rebno@0.0.0 lint:adr:0006 /home/runner/work/rebno/rebno
2026-05-17T00:47:06.1791092Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0006-observability-stack.md --no-matrix
2026-05-17T00:47:06.1791844Z 
2026-05-17T00:47:06.2038774Z OK: ADR docs/adr/0006-observability-stack.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-17T00:47:06.2136888Z 
2026-05-17T00:47:06.2137405Z === Workspace: test ===
2026-05-17T00:47:06.2137917Z >>> pnpm -r test
2026-05-17T00:47:06.4434228Z Scope: 5 of 6 workspace projects
2026-05-17T00:47:06.4474176Z packages/db test$ vitest run
2026-05-17T00:47:06.4480759Z packages/game-logic test$ vitest run
2026-05-17T00:47:06.8253288Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-17T00:47:06.8270541Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-17T00:47:07.1541854Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T00:47:07.3220819Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T00:47:07.5084298Z packages/game-logic test:  [32m✓[39m test/step-bno-fidelity.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T00:47:07.5444897Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-17T00:47:07.6685663Z packages/game-logic test:  [32m✓[39m test/run-speed.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:07.8454907Z packages/game-logic test:  [32m✓[39m test/collision-axis-slide.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:08.0097045Z packages/game-logic test:  [32m✓[39m test/movement-constants.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:08.1733598Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:08.1803594Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T00:47:08.3451209Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:08.3471400Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:08.3547268Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-17T00:47:08.3568954Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-17T00:47:08.3581300Z packages/db test: [2m   Start at [22m 00:47:06
2026-05-17T00:47:08.3586913Z packages/db test: [2m   Duration [22m 1.52s[2m (transform 117ms, setup 0ms, import 1.05s, tests 20ms, environment 0ms)[22m
2026-05-17T00:47:08.3930340Z packages/db test: Done
2026-05-17T00:47:08.3938456Z packages/protocol test$ vitest run
2026-05-17T00:47:08.5125247Z packages/game-logic test:  [32m✓[39m test/sprite-state-machine.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:08.6782039Z packages/game-logic test:  [32m✓[39m test/navi-mask-bbox.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:08.7730982Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-17T00:47:08.8500983Z packages/game-logic test:  [32m✓[39m test/wall-slide.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:09.0279826Z packages/game-logic test:  [32m✓[39m test/walkable-edge.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:09.0300604Z packages/game-logic test: [2m Test Files [22m [1m[32m12 passed[39m[22m[90m (12)[39m
2026-05-17T00:47:09.0315722Z packages/game-logic test: [2m      Tests [22m [1m[32m61 passed[39m[22m[90m (61)[39m
2026-05-17T00:47:09.0341094Z packages/game-logic test: [2m   Start at [22m 00:47:06
2026-05-17T00:47:09.0380515Z packages/game-logic test: [2m   Duration [22m 2.19s[2m (transform 207ms, setup 0ms, import 389ms, tests 79ms, environment 1ms)[22m
2026-05-17T00:47:09.0794414Z packages/game-logic test: Done
2026-05-17T00:47:09.1212894Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:47:09.2490154Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m15 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T00:47:09.3794276Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:09.4971850Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:09.4998359Z packages/protocol test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-17T00:47:09.4999774Z packages/protocol test: [2m      Tests [22m [1m[32m41 passed[39m[22m[90m (41)[39m
2026-05-17T00:47:09.5000725Z packages/protocol test: [2m   Start at [22m 00:47:08
2026-05-17T00:47:09.5002052Z packages/protocol test: [2m   Duration [22m 695ms[2m (transform 110ms, setup 0ms, import 211ms, tests 27ms, environment 0ms)[22m
2026-05-17T00:47:09.5388151Z packages/protocol test: Done
2026-05-17T00:47:09.5392323Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-17T00:47:09.5394295Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-17T00:47:09.9300909Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-17T00:47:09.9941833Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-17T00:47:10.6258734Z apps/server test: {"level":30,"time":1778978830621,"pid":4343,"hostname":"runnervmrw5os","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-17T00:47:10.6275136Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 494[2mms[22m[39m
2026-05-17T00:47:10.6307579Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 408[2mms[22m[39m
2026-05-17T00:47:11.5025062Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-17T00:47:11.5050644Z apps/client test: [22m[39mroom_layout signature did not verify — rendering anyway (defense-in-depth; see 06.1-D40-SPIKE.md) mvp-lobby 000
2026-05-17T00:47:11.5781904Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 170[2mms[22m[39m
2026-05-17T00:47:11.7300997Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 248[2mms[22m[39m
2026-05-17T00:47:12.0272501Z apps/server test:  [32m✓[39m test/layout-derive.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 97[2mms[22m[39m
2026-05-17T00:47:12.5128068Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.teleport-gate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 72[2mms[22m[39m
2026-05-17T00:47:12.7395864Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T00:47:12.7397561Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-15ZShN/rebno.db
2026-05-17T00:47:12.7412993Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:47:12.7430015Z apps/server test: [run-migrations] OK
2026-05-17T00:47:12.7638471Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T00:47:12.7640344Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-qNXRxk/rebno.db
2026-05-17T00:47:12.7653645Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:47:12.7670306Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-17T00:47:12.7685114Z apps/server test: [run-migrations] OK
2026-05-17T00:47:12.7728564Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T00:47:12.7730212Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-3hrjz9/rebno.db
2026-05-17T00:47:12.7736559Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:47:12.7737748Z apps/server test: [run-migrations] OK
2026-05-17T00:47:12.7740045Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T00:47:12.7741638Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-3hrjz9/rebno.db
2026-05-17T00:47:12.7742816Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T00:47:12.7743718Z apps/server test: [run-migrations] OK
2026-05-17T00:47:12.7796031Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 71[2mms[22m[39m
2026-05-17T00:47:12.9914899Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T00:47:13.1864679Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-17T00:47:13.3936197Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-17T00:47:13.3961807Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 103[2mms[22m[39m
2026-05-17T00:47:13.6287928Z apps/server test:  [32m✓[39m test/static-assets.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T00:47:13.8595456Z apps/server test: {"level":40,"time":1778978833856,"pid":4502,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T00:47:13.8639946Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T00:47:13.8665003Z apps/server test: {"level":40,"time":1778978833859,"pid":4502,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T00:47:13.8680016Z apps/server test: {"level":40,"time":1778978833859,"pid":4502,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T00:47:14.0453265Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T00:47:14.2125012Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:14.2792133Z apps/client test:  [32m✓[39m src/__test__/esc-menu.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 90[2mms[22m[39m
2026-05-17T00:47:14.3804636Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:15.0128379Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-17T00:47:15.0165026Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌘ override existing { override: true }
2026-05-17T00:47:15.0182296Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-17T00:47:15.2320957Z apps/client test: [90mstderr[2m | src/__test__/background-renderer.test.ts[2m > [22m[2mBackgroundRenderer — wrap math (sim-tick pure state)[2m > [22m[2mD-64 round-4: dispose() survives a group whose .clear() throws (scene-shutdown race)
2026-05-17T00:47:15.2355600Z apps/client test: [22m[39mBackgroundRenderer.dispose: group.clear threw (likely scene-shutdown race) Cannot read properties of undefined (reading 'size')
2026-05-17T00:47:15.2365459Z apps/client test:  [32m✓[39m src/__test__/background-renderer.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 90[2mms[22m[39m
2026-05-17T00:47:15.5765475Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:15.5840002Z apps/server test: [2m Test Files [22m [1m[32m13 passed[39m[22m[90m (13)[39m
2026-05-17T00:47:15.5858156Z apps/server test: [2m      Tests [22m [1m[32m78 passed[39m[22m[90m (78)[39m
2026-05-17T00:47:15.5861396Z apps/server test: [2m   Start at [22m 00:47:09
2026-05-17T00:47:15.5862708Z apps/server test: [2m   Duration [22m 5.65s[2m (transform 434ms, setup 0ms, import 2.72s, tests 1.00s, environment 1ms)[22m
2026-05-17T00:47:15.6227956Z apps/server test: Done
2026-05-17T00:47:15.9445220Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 54[2mms[22m[39m
2026-05-17T00:47:16.5929622Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 57[2mms[22m[39m
2026-05-17T00:47:17.1642863Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 31[2mms[22m[39m
2026-05-17T00:47:17.7153800Z apps/client test:  [32m✓[39m src/__test__/nameplate-stability.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 18[2mms[22m[39m
2026-05-17T00:47:18.2732157Z apps/client test:  [32m✓[39m src/__test__/nameplate-color.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 24[2mms[22m[39m
2026-05-17T00:47:18.8070154Z apps/client test:  [32m✓[39m src/__test__/player-renderer-spawn-delay.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-17T00:47:19.3549973Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-17T00:47:19.8867211Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T00:47:20.4123718Z apps/client test:  [32m✓[39m src/__test__/player-renderer.teleport.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T00:47:20.9308145Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T00:47:21.4542102Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T00:47:21.9918945Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:22.5014315Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher-shift.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:23.0230054Z apps/client test:  [32m✓[39m src/__test__/boot-font-gate.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T00:47:23.5598263Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:24.0983811Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:24.6620299Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T00:47:25.1628855Z apps/client test:  [32m✓[39m src/__test__/room-collision-bottom-edge.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:25.6859709Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:26.2134567Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:26.7356857Z apps/client test:  [32m✓[39m src/__test__/room-renderer.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T00:47:27.2363885Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:47:27.7484170Z apps/client test:  [32m✓[39m src/__test__/sprite-state-rate.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:47:28.2622392Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:47:28.7797359Z apps/client test:  [32m✓[39m src/__test__/legacy-origin.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T00:47:29.3119163Z apps/client test:  [32m✓[39m src/__test__/depth-set.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 2[2mms[22m[39m
2026-05-17T00:47:29.3283676Z apps/client test: [2m Test Files [22m [1m[32m31 passed[39m[22m[90m (31)[39m
2026-05-17T00:47:29.3310221Z apps/client test: [2m      Tests [22m [1m[32m223 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (227)[39m
2026-05-17T00:47:29.3314415Z apps/client test: [2m   Start at [22m 00:47:09
2026-05-17T00:47:29.3315774Z apps/client test: [2m   Duration [22m 19.33s[2m (transform 669ms, setup 55ms, collect 1.26s, tests 834ms, environment 11.30s, prepare 2.08s)[22m
2026-05-17T00:47:29.4376529Z apps/client test: Done
2026-05-17T00:47:29.4449433Z 
2026-05-17T00:47:29.4450120Z verify-phase-5: OK (7 steps green)
